import { ref } from 'vue';
import { defineStore } from 'pinia';
import LZString from 'lz-string';

/**
 * 权限状态
 */
export default defineStore('auth', () => {

    // console.log('[AuthStore] 初始化')
    const loginTokenKey = import.meta.env.VITE_LOGIN_TOKEN_KEY ?? 'login_token';
    const authKey = 'auth';
    // 检测登陆状态
    function isLogin() {
        return window.sessionStorage.getItem(loginTokenKey) ? true : false;
    }
    // 清理登陆状态数据
    function logout() {
        window.sessionStorage.removeItem(loginTokenKey);
        window.sessionStorage.removeItem(authKey);
        window.sessionStorage.removeItem('menutabs');
        window.sessionStorage.removeItem('routes');
    }
    // 返回 token 数据
    function getToken() {
        return window.sessionStorage.getItem(loginTokenKey) ?? '';
    }
    // 保存 token 数据
    function setToken(data) {
        // console.log('[useAuthStore] 保存token',loginTokenKey,data);
        window.sessionStorage.setItem(loginTokenKey, data);
    }

    // 权限代码数据
    const codes = ref([]);

    // 检测权限状态
    function hasCode(code) {
        if (codes.value.length == 0) {
            codes.value = JSON.parse(LZString.decompress(window.sessionStorage.getItem(authKey) ?? '[]'));
        }
        // console.log('[useAuthStore] 检查权限状态', code, codes.value.includes(code), codes.value);
        return codes.value.includes(code);
    }
    // 保存权限代码数据
    function setCodes(data) {
        codes.value = data;
        window.sessionStorage.setItem(authKey, LZString.compress(JSON.stringify(data)));
    }

    return {
        isLogin,
        logout,
        setToken,
        getToken,
        hasCode,
        setCodes
    }
}) 